/*
 * Copyright (c) 2021，上海福宇龙汽车科技有限公司
 * All rights reserved.
 * 文件名称: rte.h
 * 摘要:
 * 当前版本: V1.0.0 zhouwei
 * Date: 2024-03-12
 * 历史版本: Vx.x.x，编写者/修改者，修改时间，修改内容（重大发布时，总结重点变更内容）
 */
#ifndef _RTE_H
#define _RTE_H

#include <stdio.h>  
#include <stdbool.h>  
#include <stdint.h>
#include <string.h>
#include "app_init.h"
#include "tim_out.h"
#include "gpio.h"
#include "uart7_lcd.h"
#include "ledbuz_rte.h"
#include "app_ehbl_uart.h"
#include "fdcan.h"
#include "iwdg.h"
#include "adc2_rte.h"
#include "flash.h"

#define RTE_PIN_LEVEL_HIGH (1u)
#define RTE_PIN_LEVEL_LOW (0U)
#define RTE_IWDG_TIMMS_MAX (2000U)
#define CAN_FUN_ADDR (0x7DF)
#define CAN_REC_ID (0x7BA)
#define CAN_SWIPE_ID (0x561)
#define CAN_CTRL_ID (0x31B)
#define VER_COMP_ID (0x57f)
#define CAN_LEN (0x08)
#define AD_V_COM 0.2f /*AD电压补偿*/
// 定义交通灯状态的枚举  
enum TrafficLightState 
{  
    RED_LIGHT,    // 红灯亮  
    GREEN_LIGHT,  // 绿灯亮  
    LIGHT_OFF     // 灯熄灭  
};  

typedef enum 
{
    STEERING_LOCK,  /*方向锁*/
    CARD_READER,    /*读卡器*/
    CONTROLLER,     /*控制器*/
    CURR_MAX        /*暂无*/
}Curr_produ;/*当前产品标志*/

typedef enum 
{
    DURING_TEST,    /*测试中*/
    NOT_TESTED      /*未开始测试*/
}Test_status;/*当前测试状态*/

typedef enum
{
    TEST_OK,   /*成功*/
    TEST_FAIL,  /*失败*/
    TEST_WAIT /*等待*/
} Rt_result;   /*测试阶段函数返回值情况*/

typedef enum
{
    NO_SENT_OR_RECEIVED, /*未发送或未接受*/
    OK_SENT_OR_RECEIVED  /*发送或接受成功*/
} Sent_received_flag;    /*can\uart收发标志*/

typedef enum
{
    HARDWARE_VERSION, /*硬件版本阶段*/
    SOFTWARE_VERSION,  /*软件版本阶段*/
    HD_SW_MX
} Com_softhard_stage;       /*通信测试硬件软件版本阶段*/

typedef struct
{
    uint16_t can_id;
    uint8_t can_data[CAN_LEN];
} nfc_can;

/********************************************底层驱动RTE**************************************************/
/*软件复位*/
#define RTE_SW_RESET() HAL_NVIC_SystemReset()

/*设置PIN脚电平状态*/
#define RTE_GPIO_PIN_SET_LEVEL(GPIOx,GPIO_Pin,PinState) HAL_GPIO_WritePin(GPIOx,GPIO_Pin,PinState)

/*获取PIN脚电平状态*/
#define RTE_GPIO_PIN_GET_LEVEL(GPIOx,GPIO_Pin) HAL_GPIO_ReadPin(GPIOx,GPIO_Pin)

/*获取当前系统定时器时间*/
#define RTE_GET_TIMER() Get1MsTickVal()
/*判断时间是否超时*/
#define RTE_TIMEOUT_JUDGMENT(tick1, tick2) Get1MsTickInterval(tick1,tick2)
/*等待时间*/
#define RTE_HAL_DELAY(Delay) HAL_Delay(Delay)

/*立刻喂狗*/
#define RTE_IWDG_REFRESH()  Iwdg_Refresh()
/*定时喂狗*/
#define RTE_IWDG_TIM_REFRESH()  Iwdg_tim_Refresh()

/*ADC返回各通道电压值*/
#define RTE_ADC2_CHANNEL_V(ADC2_ch) Rt_ADC2_CH_v(ADC2_ch)

/*ADC循环触发采样*/
#define RTE_ADC2_LOOP_TRIG() ADC2_Calculate_raw_value()

/*蜂鸣器报警响num声*/
#define RTE_BUZZER_ALARM(num)  Buzzer_BeepThreeTimes(num)

/*测试合格指示绿灯亮1,测试不合格指示红灯亮0,蜂鸣器报警响num声*/
#define RTE_LED_BUZZ(led_num,buzz_num) Led_buzz(led_num,buzz_num)

#define RTE_LED_CLOSE(led_num) Led_close(led_num)

/*串口7——LCD屏显示结果*/
#define RTE_UART7_LCD_SHOW(test_product_number, data_type, data)  LCD_transmit(test_product_number, data_type, data)

/*LCD界面切换,并显示自检结果和工装电压，除了板卡上电主界面需要判断电压，其余界面默认自检通过*/
#define RTE_LCD_LCD_INTERFACE_SWITCHING(St,frock_check_result) frock_self_checking_LCD(St,frock_check_result)

/*EHBL串口底层发送*/
#define RTE_EHBL_UART_TRANSMIT(cmd,  pdata) Uart4_send( cmd,  pdata)

/*CAN发送接口*/
#define RTE_CAN_TRANSMIT( id, msg, len) FDCAN_Send_Msg( id, msg, len)

/*flash擦*/
#define RTE_FLASH_ERASE(FirstSector) bsp_EraseCpuFlash(FirstSector)

/*flash写*/
#define RTE_FLASH_WRITE(ulFlashAddr, ucpSrc, ulSize) bsp_WriteCpuFlash(ulFlashAddr, ucpSrc, ulSize)

/*flash读*/
#define RTE_FLASH_READ(ulFlashAddr, ucpDst, ulSize) bsp_ReadCpuFlash(ulFlashAddr, ucpDst, ulSize)
/********************************************底层驱动RTE**************************************************/




/********************************************应用层RTE**************************************************/
/*应用层初始化*/
#define RTE_APP_INIT() application_init()

/*串口处理数据和调用相应产品回调函数*/
#define RTE_UART_MAIN() app_uart_main()

/********************************************应用层RTE**************************************************/


#endif
